package com.tanklab.signature.common.util;
import lombok.SneakyThrows;
import org.jetbrains.annotations.NotNull;

import java.util.Random;

/**
 存储区块链节点的相关信息:
 枚举常量
     Paris: 代表国外链，包含网络 URL、钱包密钥、链 ID 和类型（"eth"）。
     Tianjin: 代表国内链，包含网络 URL、钱包密钥、链 ID 和类型（"h2chain"）。
     Beijing: 包含网络 URL，类型为 "chainmaker"。
 构造函数
     初始化每个枚举常量的 netWorkUrl、walletKey、chainId、type。
 方法
    generate_tx_id: 根据 CityBlock 类型生成一个随机交易 ID。
                     对于 eth 和 h2chain 类型，生成一个 64 位长度的十六进制字符串，前缀为 "0x"。
                     对于 chainmaker 类型，生成一个特定长度的十六进制字符串，前缀为 "17a"。
                     使用 Thread.sleep(3000) 模拟延迟。
 主方法
    打印 Tianjin 的随机交易 ID。
 注意
     网络 URL 中的 "htxxp" 应更改为 "http"。
     代码使用了 @SneakyThrows 注解来处理异常。
 */
public enum CityBlock {
    Paris("http://116.204.29.222:10012","0847b4b2f1fe3944bdb62be2f528d3a1a2cca2b957df7fba422830c1c7a14bf6",15987,"eth"),//国外链
    Tianjin("http://116.204.29.222:10016","0847b4b2f1fe3944bdb62be2f528d3a1a2cca2b957df7fba422830c1c7a14bf6",15988,"h2chain"),//国内链
    Beijing("http://116.204.29.222:12301","",0,"chainmaker");
//    Tokyo("Chain 3",3),
//    London("Chain 4",4);

    public String netWorkUrl;
    public String walletKey;
    public long chainId;
    public String type;
    CityBlock(String netWorkUrl,String walletKey,long chainId,String type) {
        this.netWorkUrl = netWorkUrl;
        this.walletKey = walletKey;
        this.chainId = chainId;
        this.type = type;
    }

    @SneakyThrows
    public static String generate_tx_id(@NotNull CityBlock cb){
        Thread.sleep(3000);
        String txid = "";
        if (cb.type.equals("eth")){
            txid = "0x";
            for (int i = 0 ; i < 64;i++){
                Random random = new Random();
                int number = random.nextInt(16);
                txid += Integer.toHexString(number);
            }
        }
        if (cb.type.equals("chainmaker")){
            int l = "75109020f396aca88a12ca807612e27e03a3180fb40c0a5108b6bd6c38c47".length();
            txid = "17a";
            for (int i = 0 ; i < l;i++){
                Random random = new Random();
                int number = random.nextInt(16);
                txid += Integer.toHexString(number);
            }
        }
        if (cb.type.equals("h2chain")){
            txid = "0x";
            int l = "385ac730303c4e839fc89c6d74c282a4640fc633d63f97f4e1135e1cba3be545".length();
            for (int i = 0 ; i < l;i++){
                Random random = new Random();
                int number = random.nextInt(16);
                txid += Integer.toHexString(number);
            }
        }

        return txid;
    }
    public static void main(String[] args) {
        System.out.println(generate_tx_id(CityBlock.Tianjin));
    }
}
